package com.desire.homework;

import java.io.*;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author desire
 */
public class _38_将java文件源码存放到txt文本中 {


    public static void main(String[] args) {

        Long start = System.currentTimeMillis();

        //String srcpath = System.getProperty("user.dir");
        String srcpath = "C:\\Program Files\\Java\\jdk-17.0.1\\lib\\src\\";
        String srcout = "C:\\Users\\desire\\Desktop\\javaProject\\01-javaBase\\src\\main\\resources\\java17src.txt";
        getAllJavaFile(new File(srcpath), new File(srcout));

        Long end = System.currentTimeMillis();
        System.out.println("执行文件写入耗时： " + (end - start) / 1000 + " s");
    }

    /**
     * 将每个.java文件以字符流读到, 然后再存储到一个文件当中
     *
     * @param src
     * @param out
     */
    public static void writeTxt(File src, File out) {
        try (var read = new BufferedReader(new FileReader(src)); var write = new BufferedWriter(new FileWriter(out, true))) {
            StringBuilder sbu = new StringBuilder();
            sbu.append("-".repeat(60)).append("\n");
            sbu.append(String.format("---文件的名字: %s\n", src.getName()));
            sbu.append(String.format("---文件的路径: %s\n", src.getAbsolutePath()));
            sbu.append("-".repeat(60)).append("\n");
            // 每读到一行 后边就就加一个换行
            String info = read.lines().collect(Collectors.joining("\n"));
            // 读完整个文件 添加两个换行  添加到字符串生成器对象中
            sbu.append(info).append("\n\n");
            // 写入到 指定的out 文件中
            write.write(sbu.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取到所有 .java文件的路径
     *
     * @param directory
     */
    public static void getAllJavaFile(File directory, File out) {

        if (directory.exists() && directory.isDirectory()) {
            for (File file : Objects.requireNonNull(directory.listFiles())) {
                if (file.isDirectory()) {
                    getAllJavaFile(file, out);
                } else if (file.getName().toLowerCase().endsWith(".java")) {
                    writeTxt(file, out);
                }
            }
        } else if (directory.exists() && directory.isFile() && directory.getName().toLowerCase().endsWith(".java")) {
            writeTxt(directory, out);
        }
    }
}
